"""
"""

"""
这行代码的完整变化流程如下：

## 1. `torch.ones(L, L, device=x.device, dtype=torch.bool)`
- 创建一个 `L×L` 的全1矩阵
- 数据类型为布尔型 (`torch.bool`)
- 存储在与输入张量 [x](file://E:\PycharmProjects\pytorch-learning\learning\test16.py#L16-L16) 相同的设备上（CPU或GPU）
- 例如当 `L=5` 时，结果为：
```
tensor([[True, True, True, True, True],
        [True, True, True, True, True],
        [True, True, True, True, True],
        [True, True, True, True, True],
        [True, True, True, True, True]])
```


## 2. `torch.tril(...)`
- 对全1矩阵应用下三角函数 `torch.tril`
- 将矩阵上三角部分（不包括对角线）置为0
- 保留下三角部分（包括对角线）为1
- 例如当 `L=5` 时，结果为：
```
tensor([[True, False, False, False, False],
        [True, True, False, False, False],
        [True, True, True, False, False],
        [True, True, True, True, False],
        [True, True, True, True, True]])
```


## 3. `causal_mask = ...`
- 将生成的下三角布尔矩阵赋值给 `causal_mask` 变量
- 这个掩码矩阵用于后续的注意力机制中，确保每个位置只能关注到它之前的位置（包括当前位置）
- 实现了Transformer中的因果注意力（causal attention）机制，防止信息泄露
"""

"""
这行代码 `scores = scores.masked_fill(~causal_mask, float('-inf'))` 的完整变化流程如下：

1. **`causal_mask` 的生成**：
   - 通过 `torch.tril(torch.ones(L, L, device=x.device, dtype=torch.bool))` 生成下三角布尔矩阵
   - 例如当 `L=5` 时：
     ```
     tensor([[ True, False, False, False, False],
             [ True,  True, False, False, False],
             [ True,  True,  True, False, False],
             [ True,  True,  True,  True, False],
             [ True,  True,  True,  True,  True]])
     ```


2. **`~causal_mask` 的操作**：
   - 对 `causal_mask` 进行逻辑非操作（取反）
   - 将 `True` 变为 `False`，`False` 变为 `True`
   - 结果为上三角矩阵（不包括对角线）：
     ```
     tensor([[False,  True,  True,  True,  True],
             [False, False,  True,  True,  True],
             [False, False, False,  True,  True],
             [False, False, False, False,  True],
             [False, False, False, False, False]])
     ```


3. **`masked_fill` 的作用**：
   - 使用 `masked_fill` 函数，将 `scores` 张量中对应 `~causal_mask` 为 `True` 的位置填充为 `float('-inf')`
   - 即将上三角部分（未来位置）的注意力分数设置为负无穷

4. **效果**：
   - 在后续的 `F.softmax` 操作中，负无穷位置的注意力权重会变为0
   - 从而实现因果注意力机制，确保每个位置只能关注到它之前的位置
"""
